package com.xinqi.util;

import com.xinqi.common.SystemContents;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

/**
 * @author xin麒
 * @date 2023/8/25 17:21
 */
@Slf4j
public class FutureUtil {
    public static void clearFuturesNow(ArrayList<Future<Boolean>> futures) {
        //要讲解的点：以下的等待是必不可少。
        futures.forEach(f -> {//因为后续要执行sessionArray.helpGC()，所以说这里必须等待所有sqlSession都提交后才可以对sqlsession进行close
            // 所有futures元素的get方法都已经返回了结果==间接表明==>等待所有sqlSession都已提交完毕。
            try {
                f.get();
            } catch (InterruptedException | ExecutionException e) {
                e.printStackTrace();
                log.debug("this has an Exception");
            }
        });
        futures.clear();
    }
    public static void clearFutures(ArrayList<Future<Boolean>> futures) {
        if (futures.size() == SystemContents.CPU_COUNT) {
            futures.forEach(f -> {
                try {
                    f.get();
                } catch (InterruptedException | ExecutionException e) {
                    e.printStackTrace();
                }
            });
            futures.clear();
        }
    }
}
